// 方法1
export default function myArray(arr){
  let list=[...arguments];
 
  if(Object.prototype.toString.call(list)=='[object Array]'&&arguments.length==1){
    list=arr
  }

  const hanlder={
    filter(fn){
      let resArr=[]
      for(let i=0;i<list.length;i++){
        let item=list[i];
        if(fn(item,i)) resArr.push(item)
      }
      return resArr
    },
    
    map(fn){
      let resArr=[]
      for(let i=0;i<list.length;i++){
        let item=list[i];
        resArr.push(fn(item,i))
      }
      return resArr
    },

    forEach(fn){
      for(let i=0;i<list.length;i++){
        let item=list[i];
        fn(item,i)
      }
    },

    forEachEnd(fn){
      for(let i=0;i<list.length;i++){
        let item=list[i];
        if(fn(item,i)) return 
      }
    },

    reduce(fn,first){
      let prev=first;
      for(let i=0;i<list.length;i++){
        let item=list[i];
        prev=fn(prev,item,i)
      }
      return prev
    },

    find(fn){
      let res=undefined
      for(let i=0;i<list.length;i++){
        let item=list[i];
        if(fn(item,i)) return item
      }
      return res
    },

    findIndex(fn){
      let res=undefined
      for(let i=0;i<list.length;i++){
        let item=list[i];
        if(fn(item,i)) return i
      }
      return res
    },

    every(fn){
      let res=true
      for(let i=0;i<list.length;i++){
        let item=list[i];
        if(!fn(item,i)) return false
      }
      return res
    },

    some(fn){
      let res=false
      for(let i=0;i<list.length;i++){
        let item=list[i];
        if(fn(item,i)) return true
      }
      return res
    },

    
    get(){
      return list
    }
  }


  return hanlder
}